home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / russell / russell.lha / examples / fixpoint.r < prev    next >
Text File  |  1989-12-29  |  558b  |  46 lines

  1.  
  2. # define fn  func[ x: val Short ] val Short
  3.  
  4. let
  5.     Y == func[ g func[ fn] fn ] {
  6.          func [ x val Short ] val Short {
  7.          (g[Y[g]]) [x]
  8.          }   
  9.      };
  10.  
  11.     G == func[ f fn  ] {
  12.          func[ n val Short ] val Short {
  13.          if
  14.             n > 0 ==> n * f [n - 1]
  15.          #  n = 0 ==> 1
  16.          fi
  17.          }
  18.     };
  19.  
  20.     fact == Y[G]
  21.  
  22. in
  23.  
  24.     let 
  25.     x == Short$New[];
  26.  
  27.     getarg == func[FS: var Void] {
  28.             put["Factorial of? "];
  29.             get[FS]
  30.           };
  31.  
  32.     nl == func[] {put["\n"]};
  33.     in
  34.  
  35.     x := getarg[FS];
  36.  
  37.     do
  38.  
  39.         x >= 0  ==>  put[fact[x]];  nl[]; x := getarg[FS]
  40.  
  41.     od
  42.  
  43.     ni
  44.  
  45. ni
  46.